package com.hangsu.train.components.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.hangsu.train.components.entity.Task;
import com.hangsu.train.components.params.TaskParam;
import com.hangsu.train.components.params.TaskUpdateParam;
import org.quartz.Job;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface TaskService {

    /**
     * 任务列表
     *
     * @param param
     * @return
     */
    Page<Task> list(TaskParam param);

    /**
     * 获取全部任务
     *
     * @return
     */
    List<Task> getAll();

    /**
     * 添加任务
     *
     * @param task
     */
    void create(Task task);

    /**
     * 修改任务
     *
     * @param task
     */
    void update(Task task) throws JsonProcessingException;


    /**
     * 批量修改
     *
     * @param task
     * @throws JsonProcessingException
     */
    void batchUpdate(TaskUpdateParam task) throws JsonProcessingException;

    /**
     * 任务详情
     *
     * @param taskId
     * @return
     */
    Task detail(Long taskId);

    /**
     * 任务详情
     *
     * @param taskId
     * @return
     */
    void del(Long taskId);

    /**
     * 创建任务
     *
     * @param jobName
     * @param cronExpression
     * @param params
     * @param jobClass
     */
    void addJob(String jobName, String cronExpression, Map<String, Object> params, Class<? extends Job> jobClass);


    /**
     * 删除任务
     *
     * @param jobName
     */
    void removeJob(String jobName);

    /**
     * 立即启动任务
     *
     * @param jobName
     * @param params
     * @param jobClass
     */
    void startNow(String jobName, Map<String, Object> params, Class<? extends Job> jobClass) throws Exception;

}